package ar.fi.uba.celdas.correccion.prediccion.heuristicas;

import java.util.ArrayList;
import java.util.Collection;

import ar.fi.uba.celdas.correccion.prediccion.HeuristicaPrediccion;
import ar.fi.uba.celdas.interfaces.bc.IBaseConocimientos;
import ar.fi.uba.celdas.interfaces.bc.Regla;
import ar.fi.uba.celdas.interfaces.bc.Sensor;

public class Inusualidad extends HeuristicaPrediccion{

	@Override
	public void corregirRegla(Regla original, IBaseConocimientos bc) {
		if (bc == null || original == null) {
			return;
		}
		
		Collection<Sensor> situacionInicial = bc.getEstadoAnterior();
		Collection<Sensor> condiciones = original.getCondiciones();
		Collection<Sensor> condicionesNegadas = original.getCondicionesNegadas();
		
		Collection<Sensor> condicionesANegar = new ArrayList<Sensor>();
		
		for (Sensor sensorSit : situacionInicial) {
			
			//TODO: ver que hacer con los sensores de posicion (POSX, POSY)
			
			boolean negar = true;
			for (Sensor sensorCond : condiciones) {
				// Si el sensor de la situacion esta en las condiciones
				// de la regla entonces no lo puedo negar
				if (sensorSit.getNombre().equals(sensorCond.getNombre())) {
					negar = false;
					break;
				}
			}
			
			if (negar) {
				for (Sensor sensorCondNeg : condicionesNegadas) {
					// Si el sensor de la situacion esta en las condiciones negadas
					// de la regla entonces no lo puedo volver a negar?
					if (sensorSit.getNombre().equals(sensorCondNeg.getNombre())) {
						negar = false;
						break;
					}
				}
			}
			
			if (negar) {
				condicionesANegar.add(sensorSit);
			}
		}
		
		//Correccion de la regla
		if (!condicionesANegar.isEmpty()) {
			actualizar(original, condicionesANegar, bc);
		}
	}
}
